A major goal in the design of DTS was
programmability
i.e. the ability to parallelize large codes under adverse and shifting
conditions, while preserving good, but not necessarily optimal,
efficiency. We need good performance of the exact same application
program on networks of different sizes, including the case of dynamic
addition or deletion of nodes. We also require that a parallel method
can later be called as a parallel subtask by other programs under
different conditions without reprogramming or reconfiguration.
Our programming style is based on the
fork/join
paradigm. We
attempt to saturate the network with dynamically created tasks of
various grainsizes. On a shared memory multiprocessor even
light-weight parallel tasks can be supported as concurrent threads of
control. The network analogue is an asynchronous RPC, i.e., a thread
of control which can execute remotely because it carries a copy of all
input data with it.
DTS is currently implemented on top of PVM, adding the remote RPC
abstraction and turning the net into a pool of anonymous compute
servers. Each node of DTS is multi-threaded and is thus ready to run
on a multiprocessor workstation.